
// 1.  CD  虚拟DOM底层还是会操作DOM，并不是不需要操作DOM，只是会减少DOM操作
// 2.  CD  snabbdom本身不可以处理DOM属性、事件、样式等，需要引入模块才能处理
//            清空元素需要使用注释节点 patch(oldVnode,'!')
// 3. patchVnode函数执行过程
// 第一步. 执行用户传入的prepatch钩子函数，如果新旧节点相同则返回。否则执行用户传入的update钩子函数
// 第二步. 对比节点分两种情况，
//            第一种情况新节点有text属性且不等于旧节点的text属性，则设置dom元素的textContent（设置前先判断老节点是否有children，有则移除children对应的dom元素）
//            第二种情况新节点没有text属性
//           	   新节点和旧节点都有children，新旧节点children不一致，调用updateChildren对比子节点，并更新差异
//           	   只有新节点有children，先判断旧节点是否有text属性，有则清空对应DOM元素的内容，然后添加子节点
//          	   只有旧节点有children，移除所有的旧节点
//       	   旧节点有text属性，清空对应dom的textContent
// 第三步.执行用户传入的postpatch钩子函数